/**
 * Player order management
 */
package com.aceitunaproject.client.commands;

/**
 * 
 * Represents an order being constructed in the UI
 * 
 * @author Federico Bergstein
 * 
 */
public interface Order {

	/**
	 * Gets the name of the order (ex: Attack)
	 * 
	 * @return the name of the order.
	 */
	String getName();

	
	/**
	 * 
	 * Moves to the next parameter
	 * 
	 * @return true if there are more parameters, false if there are not.
	 */
	boolean moveToNextParameter();

	/**
	 * Gets the current parameter needed for the order.
	 * 
	 * @return the current parameter needed.
	 */
	Parameter<?> getParameter();
	
	/**
	 * Executes the order.
	 */
	void execute();
	
	boolean hasExecuted();
	
	/**
	 * Gets a description of the order on its current status (ej Move unit pepe to Position (1,1))
	 * @return
	 */
	String getDescription();

}
